#ifndef CLIENT_H_
#define CLIENT_H_

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

#include "clientOperacion.h"
#include "commonModeloProtocolo.h"
#include "commonConfig.h"
#include "clientSocket.h"

class Client {
private:
	ClientSocket socket;
	std::ofstream* log;

public:
	/*Recibe la ip y el numero del puerto al que se desea conectar junto con el
	 * path del archivo de salida para loguear los resultados. */
	Client(char *ip, unsigned int puerto, char *path);

	/* Envía datos a través del socket. */
	int escribir(void *buf, size_t tamanio);

	/* Recibe datos a través del socket. */
	int leer(void *buf, size_t tamanio);

	virtual ~Client();

	void escribirLog(const char* respuesta, const Operacion& operacion);

	/* Dada una operacion extraida del archivo de operaciones, recibe la
	 * respuesta obtenida por parte del servidor y la escribe en el
	 * archivo de respuestas.*/
	void obtenerRespuesta(const Operacion& operacion);

	/* Dada una operacion extraida del archivo de operaciones,
	 * escribe en el servidor los datos de la misma.*/
	void realizarPedido(Operacion& operacion);

	ClientSocket getSocket() const;

	void setSocket(ClientSocket socket);
};

#endif /* CLIENT_H_ */
